import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'category_manager.dart';
import '../model/categoryModel.dart';

/// 全局分类管理器使用示例
/// 这个文件展示了如何在各个地方使用CategoryManager

class CategoryManagerUsageExample extends StatefulWidget {
  @override
  _CategoryManagerUsageExampleState createState() => _CategoryManagerUsageExampleState();
}

class _CategoryManagerUsageExampleState extends State<CategoryManagerUsageExample> {
  
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('分类管理器使用示例')),
      body: Column(
        children: [
          // 方式1：直接访问实例
          _buildDirectAccessExample(),
          
          // 方式2：响应式UI更新
          _buildReactiveExample(),
          
          // 方式3：操作按钮示例
          _buildActionButtonsExample(),
        ],
      ),
    );
  }

  /// 方式1：直接访问分类数据
  Widget _buildDirectAccessExample() {
    return Card(
      margin: EdgeInsets.all(16),
      child: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text('方式1：直接访问分类数据', style: TextStyle(fontWeight: FontWeight.bold)),
            SizedBox(height: 8),
            ElevatedButton(
              onPressed: () {
                // 🔥 直接获取分类数据
                final categories = CategoryManager.instance.categories;
                debugPrint('当前有 ${categories.length} 个分类');
                
                // 获取分类名称列表
                final names = CategoryManager.instance.getCategoryNames();
                debugPrint('分类名称: $names');
                
                // 查找特定分类
                final category = CategoryManager.instance.getCategoryById(1);
                if (category != null) {
                  debugPrint('找到分类: ${category.categoryName}');
                }
                
                // 显示调试信息
                debugPrint(CategoryManager.instance.getDebugInfo());
              },
              child: Text('获取分类数据'),
            ),
          ],
        ),
      ),
    );
  }

  /// 方式2：响应式UI更新（自动刷新界面）
  Widget _buildReactiveExample() {
    return Card(
      margin: EdgeInsets.all(16),
      child: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text('方式2：响应式UI更新', style: TextStyle(fontWeight: FontWeight.bold)),
            SizedBox(height: 8),
            // 🔥 使用Obx监听分类数据变化，UI会自动更新
            Obx(() {
              final categoryManager = CategoryManager.instance;
              
              if (categoryManager.isLoading) {
                return CircularProgressIndicator();
              }
              
              if (!categoryManager.hasCategories) {
                return Text('暂无分类数据');
              }
              
              return Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text('分类数量: ${categoryManager.categories.length}'),
                  SizedBox(height: 4),
                  ...categoryManager.categories.take(3).map((category) => 
                    Text('• ${category.categoryName} (ID: ${category.categoryId})')
                  ).toList(),
                ],
              );
            }),
          ],
        ),
      ),
    );
  }

  /// 方式3：操作按钮示例
  Widget _buildActionButtonsExample() {
    return Card(
      margin: EdgeInsets.all(16),
      child: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text('方式3：分类数据操作', style: TextStyle(fontWeight: FontWeight.bold)),
            SizedBox(height: 8),
            Wrap(
              spacing: 8,
              children: [
                ElevatedButton(
                  onPressed: () {
                    // 🔥 添加新分类
                    final newCategory = CategoryModel(
                      categoryId: 999,
                      categoryName: '测试分类',
                      categoryDesc: '这是一个测试分类',
                    );
                    CategoryManager.instance.addCategory(newCategory);
                  },
                  child: Text('添加分类'),
                ),
                ElevatedButton(
                  onPressed: () {
                    // 🔥 清空所有分类
                    CategoryManager.instance.clearCategories();
                  },
                  child: Text('清空分类'),
                ),
                ElevatedButton(
                  onPressed: () {
                    // 🔥 查找分类
                    final category = CategoryManager.instance.getCategoryByName('测试分类');
                    if (category != null) {
                      ScaffoldMessenger.of(context).showSnackBar(
                        SnackBar(content: Text('找到分类: ${category.categoryName}')),
                      );
                    } else {
                      ScaffoldMessenger.of(context).showSnackBar(
                        SnackBar(content: Text('未找到指定分类')),
                      );
                    }
                  },
                  child: Text('查找分类'),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

/// 在其他Widget中使用CategoryManager的简单示例
class SimpleCategoryList extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Obx(() {
      final categories = CategoryManager.instance.categories;
      
      if (categories.isEmpty) {
        return Center(child: Text('暂无分类数据'));
      }
      
      return ListView.builder(
        itemCount: categories.length,
        itemBuilder: (context, index) {
          final category = categories[index];
          return ListTile(
            title: Text(category.categoryName),
            subtitle: Text('ID: ${category.categoryId}'),
            trailing: Text(category.categoryDesc),
          );
        },
      );
    });
  }
}

/// 在BLoC或其他业务逻辑中使用CategoryManager
class CategoryBusinessLogic {
  
  /// 检查分类是否存在
  static bool isCategoryExists(int categoryId) {
    return CategoryManager.instance.getCategoryById(categoryId) != null;
  }
  
  /// 获取分类名称，如果不存在返回默认值
  static String getCategoryName(int categoryId, {String defaultName = '未知分类'}) {
    final category = CategoryManager.instance.getCategoryById(categoryId);
    return category?.categoryName ?? defaultName;
  }
  
  /// 获取所有分类ID列表
  static List<int> getAllCategoryIds() {
    return CategoryManager.instance.getCategoryIds();
  }
  
  /// 筛选包含特定关键词的分类
  static List<CategoryModel> searchCategories(String keyword) {
    return CategoryManager.instance.categories
        .where((category) => 
            category.categoryName.toLowerCase().contains(keyword.toLowerCase()) ||
            category.categoryDesc.toLowerCase().contains(keyword.toLowerCase())
        ).toList();
  }
}

/// 🔥 常用的快捷访问方法
class CategoryHelper {
  /// 快速获取CategoryManager实例
  static CategoryManager get manager => CategoryManager.instance;
  
  /// 快速获取所有分类
  static List<CategoryModel> get all => manager.categories;
  
  /// 快速检查是否有分类数据
  static bool get hasData => manager.hasCategories;
  
  /// 快速获取分类数量
  static int get count => manager.categories.length;
  
  /// 快速根据ID获取分类名称
  static String nameById(int id) => manager.getCategoryById(id)?.categoryName ?? '未知';
}

/*
🔥 在其他文件中的使用示例：

1. 直接访问：
   final categories = CategoryManager.instance.categories;

2. 响应式访问（UI会自动更新）：
   Obx(() => Text('分类数量: ${CategoryManager.instance.categories.length}'))

3. 查找特定分类：
   final category = CategoryManager.instance.getCategoryById(1);

4. 获取分类名称列表：
   final names = CategoryManager.instance.getCategoryNames();

5. 使用便捷访问方法：
   final count = CategoryHelper.count;
   final hasData = CategoryHelper.hasData;
   final name = CategoryHelper.nameById(1);

6. 检查数据是否过期：
   if (CategoryManager.instance.isDataExpired) {
     // 需要重新获取数据
   }
*/
